import pandas as pd
import os


def check_prefix_in_folder(folder_path, prefix):
    files = os.listdir(folder_path)
    for file in files:
        if file.startswith(prefix):
            return file

def 转为百分比(a,b):
    if b=="":
        return  str(a)+"%"
    else:
        try:
            小数=a/b
            数值=round(小数*100,4)
            return  str(数值)+"%"
        except:
            return  str(0)+"%"


def 保存数据(保存内容):

    with open("./output.txt", 'a') as file:
        new_line = 保存内容+"\n"
        file.write(new_line)

output_path = "./output.txt"
# 检查文件是否存在
if os.path.exists(output_path):
    # 如果文件存在，则删除文件
    os.remove(output_path)
    # print(f"文件 '{output_path}' 已存在，已删除。")
# 创建新文件
with open(output_path, 'w') as file:
    file.write("\n")

# print(f"文件 '{output_path}' 已重新创建。")


folder_path = "."  # 当前文件夹路径
prefix = "主经纪商交易业务汇总表（按私募客户）"  # 指定的前缀
交易数据路径="./"+check_prefix_in_folder(folder_path, prefix)
交易数据=pd.read_excel(交易数据路径)
# 拆分第一行的合并单元格
交易数据.loc[0] = 交易数据.loc[0].str.split(' ').explode().reset_index(drop=True)
交易数据.loc[3] = 交易数据.loc[3].str.split(' ').explode().reset_index(drop=True)
交易数据 = 交易数据.drop([0,1,2,3,4,5,7])
交易数据 = 交易数据.drop(交易数据.columns[0], axis=1)
交易数据 = 交易数据.reset_index(drop=True)
交易数据.columns=["月份","产品名称","客户编号","产品管理人名称","营业部编码","营业部名称","当月期末资产（万）","当月资金净流入","当月委托笔数（含撤单）","当月撤单笔数","当月撤单率","深市撤单率","沪市撤单率",
              "当月股基交易量（普通+信用，万）","股基交易净佣金（万）","期权交易金额（亿）","期权交易净佣金（万）","当月交易净佣金（万）","月换手率","当月盈亏（元）","当月盈亏率","交易量最大的渠道（渠道号）"]
交易渠道=list(set(交易数据["交易量最大的渠道（渠道号）"].tolist()))
print(交易渠道)
交易月份=sorted(list(set(交易数据["月份"].tolist())))

操作渠道字典={"Q":"迅投主经纪商委托","L":"恒生主经纪商委托","Y":"OneQuant系统","R":"定制化主经纪商","e":"云纪ptrade",
        "d":"络町交易系统","J":"宏汇ETF系统","f":"今古交易系统","W":"策略托管平台","X":"算法交易平台","b":"卡方交易算法","c":"T0算法策略服务","q":"跃然T0算法","7":"银行委托","1":"电话内线"}
明细数据=pd.DataFrame(columns=['月份', '产品名称', '客户编号', '产品管理人名称', '营业部编码', '营业部名称', '当月期末资产（万）',
       '当月资金净流入', '当月委托笔数（含撤单）', '当月撤单笔数', '当月撤单率', '深市撤单率', '沪市撤单率',
       '当月股基交易量（普通+信用，万）', '股基交易净佣金（万）', '期权交易金额（亿）', '期权交易净佣金（万）',
       "当月交易净佣金（万）", '月换手率', '当月盈亏（元）', '当月盈亏率',
       '交易量最大的渠道（渠道号）', '月增长量', '月环比增幅', '增长贡献比例',"月增长量系统占比","上月交易量"])

for 渠道 in ["-","6","8","Z","T","0","V"]:
    print(渠道)
    交易渠道.remove(渠道)


print(f"需要处理的操作渠道：{交易渠道}")

for 操作渠道  in 交易渠道:
    # print(f"当前处理操作渠道为：{操作渠道字典[操作渠道]}")
    # 保存数据(f"当前处理操作渠道为：{操作渠道字典[操作渠道]}")
    上个月,当月=交易月份[0],交易月份[1]
    对应操作渠道上月数据=交易数据[(交易数据["月份"]==上个月) & (交易数据["交易量最大的渠道（渠道号）"]==操作渠道)]
    对应操作渠道上月数据['当月股基交易量（普通+信用，万）'] = 对应操作渠道上月数据['当月股基交易量（普通+信用，万）'].fillna(0)
    对应操作渠道当月数据=pd.DataFrame()
    对应操作渠道当月数据=交易数据[(交易数据["月份"]==当月) & (交易数据["交易量最大的渠道（渠道号）"]==操作渠道)]
    对应操作渠道当月数据['当月股基交易量（普通+信用，万）'] = 对应操作渠道当月数据['当月股基交易量（普通+信用，万）'].fillna(0)
    对应操作渠道当月数据["月增长量"]=0
    对应操作渠道当月数据["月环比增幅"]=0
    对应操作渠道当月数据["增长贡献比例"]=0
    对应操作渠道当月数据["月增长量系统占比"]=0
    对应操作渠道当月数据["上月交易量"]=0
    上月交易量=对应操作渠道上月数据["当月股基交易量（普通+信用，万）"].sum()
    当月交易量=对应操作渠道当月数据["当月股基交易量（普通+信用，万）"].sum()
    月增长量=当月交易量-上月交易量
    if 上月交易量!=0:
        月涨幅=(当月交易量-上月交易量)/上月交易量
    else:
        月涨幅=0
    if 月涨幅>0:
        print(f"1、当前处理操作渠道：{操作渠道字典[操作渠道]}交易量月涨幅达{转为百分比(当月交易量-上月交易量,上月交易量)},交易量增加{round(月增长量,4)}万,上个月交易量为{上月交易量}万，当月交易量为{当月交易量}万")
        保存数据(f"1、当前处理操作渠道：{操作渠道字典[操作渠道]}交易量月涨幅达{转为百分比(当月交易量-上月交易量,上月交易量)},交易量增加{round(月增长量,4)}万")
        for index,row in 对应操作渠道当月数据.iterrows():
            该产品当月交易量=row["当月股基交易量（普通+信用，万）"]
            try:
                该产品上月交易量=对应操作渠道上月数据[对应操作渠道上月数据["客户编号"]==row["客户编号"]]["当月股基交易量（普通+信用，万）"].iloc[-1]
            except:
                该产品上月交易量=0
            对应操作渠道当月数据.loc[index,"上月交易量"]=该产品上月交易量
            对应操作渠道当月数据.loc[index,"月增长量"]=该产品当月交易量-该产品上月交易量
            对应操作渠道当月数据.loc[index,"增长贡献比例"]=(该产品当月交易量-该产品上月交易量)/月增长量
            if 该产品上月交易量==0:
                对应操作渠道当月数据.loc[index,"月环比增幅"]=0
            elif 该产品上月交易量>0:
                对应操作渠道当月数据.loc[index,"月环比增幅"]=(该产品当月交易量-该产品上月交易量)/该产品上月交易量
        对应操作渠道当月数据["月增长量系统占比"]=对应操作渠道当月数据["月增长量"]/当月交易量
        产品平均月环比涨幅=转为百分比(对应操作渠道当月数据["月环比增幅"].mean(),"")
        产品最大月环比涨幅=转为百分比(对应操作渠道当月数据["月环比增幅"].max(),"")
        产品最小月环比涨幅=转为百分比(对应操作渠道当月数据["月环比增幅"].min(),"")
        print(f"2、该渠道下产品的平均月环比涨幅为：{产品平均月环比涨幅}，最大月环比涨幅：{产品最大月环比涨幅}，最小月环比涨幅：{产品最小月环比涨幅}")
        保存数据(f"2、该渠道下产品的平均月环比涨幅为：{产品平均月环比涨幅}，最大月环比涨幅：{产品最大月环比涨幅}，最小月环比涨幅：{产品最小月环比涨幅}")

        # 按列'B'降序排列
        df_sorted = 对应操作渠道当月数据.sort_values(by='增长贡献比例', ascending=False)

        # 显示前10行数据
        top = df_sorted.head(10)
        top_10=top[top["增长贡献比例"]>0]
        print(top_10)
        合计交易占比=转为百分比(top_10["月增长量系统占比"].sum(),"")
        print(f"3、交易量增长贡献前10合计新增交易占当月系统交易量为：{合计交易占比}，产品依次为:")
        保存数据(f"3、交易量增长贡献前10合计新增交易占当月系统交易量为：{合计交易占比}，产品依次为:")
        i=0
        for index,row in top_10.iterrows():
            i=i+1
            产品贡献率=row["月增长量"]/月增长量
            交易占比=row["月增长量"]/当月交易量
            产品名称=row["产品名称"]
            上月交易=row["上月交易量"]
            当月交易=row["当月股基交易量（普通+信用，万）"]
            print(f"({i}),操作渠道：{操作渠道字典[操作渠道]}，增长贡献第{i},增长贡献率(月增长量/系统月增长量)：{转为百分比(row['月增长量'],月增长量)}，变动交易量占系统当月交易量占比为：{转为百分比(row['月增长量'],当月交易量)}，产品名称为：{产品名称},当月交易量：{当月交易}万，上月交易量：{上月交易}万，环比变动{转为百分比(当月交易-上月交易,上月交易)}")
            保存数据(f"({i}),操作渠道：{操作渠道字典[操作渠道]}，增长贡献第{i},增长贡献率(月增长量/系统月增长量)：{转为百分比(row['月增长量'],月增长量)}，变动交易量占系统当月交易量占比为：{转为百分比(row['月增长量'],当月交易量)}，产品名称为：{产品名称},当月交易量：{当月交易}万，上月交易量：{上月交易}万，环比变动{转为百分比(当月交易-上月交易,上月交易)}")
        # 按列'B'降序排列
        df_sorted = 对应操作渠道当月数据.sort_values(by='增长贡献比例', ascending=True)
        # 显示前10行数据
        top= df_sorted.head(10)
        top_10=top
        合计交易占比=转为百分比(top_10["月增长量"].sum()/当月交易量,"")
        print(f"4、交易量增长贡献倒数前10合计新增交易占当月系统交易量为：{合计交易占比}，产品依次为:")
        保存数据(f"4、交易量增长贡献倒数前10合计新增交易占当月系统交易量为：{合计交易占比}，产品依次为:")
        i=0
        for index,row in top_10.iterrows():
            i=i+1
            产品贡献率=row["月增长量"]/月增长量
            交易占比=row["月增长量"]/当月交易量
            产品名称=row["产品名称"]
            上月交易=row["上月交易量"]
            当月交易=row["当月股基交易量（普通+信用，万）"]
            print(f"({i}),操作渠道：{操作渠道字典[操作渠道]}，增长贡献倒数第{i},增长贡献率(月增长量/系统月增长量)：{转为百分比(row['月增长量'],月增长量)}，变动交易量占系统当月交易量占比为：{转为百分比(row['月增长量'],当月交易量)}，产品名称为：{产品名称},当月交易量：{当月交易}万，上月交易量：{上月交易}万，环比变动{转为百分比(当月交易-上月交易,上月交易)}")
            保存数据(f"({i}),操作渠道：{操作渠道字典[操作渠道]}，增长贡献倒数第{i},增长贡献率(月增长量/系统月增长量)：{转为百分比(row['月增长量'],月增长量)}，变动交易量占系统当月交易量占比为：{转为百分比(row['月增长量'],当月交易量)}，产品名称为：{产品名称},当月交易量：{当月交易}万，上月交易量：{上月交易}万，环比变动{转为百分比(当月交易-上月交易,上月交易)}")
        print("----------------------------------------------------------------------------------------------------")
        保存数据("----------------------------------------------------------------------------------------------------")
        保存数据("\n")
        保存数据("\n")
    elif 月涨幅<0:
        print(f"1、当前处理操作渠道：{操作渠道字典[操作渠道]}交易量月涨幅达{转为百分比(月涨幅,'')},交易量增加{round(月增长量,4)}万")
        保存数据(f"1、当前处理操作渠道：{操作渠道字典[操作渠道]}交易量月涨幅达{转为百分比(月涨幅,'')},交易量增加{round(月增长量,4)}万")
        for index,row in 对应操作渠道当月数据.iterrows():
            该产品当月交易量=row["当月股基交易量（普通+信用，万）"]
            try:
                该产品上月交易量=对应操作渠道上月数据[对应操作渠道上月数据["客户编号"]==row["客户编号"]]["当月股基交易量（普通+信用，万）"].iloc[-1]
            except:
                该产品上月交易量=0
            对应操作渠道当月数据.loc[index,"上月交易量"]=该产品上月交易量
            对应操作渠道当月数据.loc[index,"月增长量"]=该产品当月交易量-该产品上月交易量
            对应操作渠道当月数据.loc[index,"增长贡献比例"]=(该产品当月交易量-该产品上月交易量)/月增长量
            if 该产品上月交易量==0:
                对应操作渠道当月数据.loc[index,"月环比增幅"]=0
            elif 该产品上月交易量>0:
                对应操作渠道当月数据.loc[index,"月环比增幅"]=(该产品当月交易量-该产品上月交易量)/该产品上月交易量
        对应操作渠道当月数据["月增长量系统占比"]=对应操作渠道当月数据["月增长量"]/当月交易量
        产品平均月环比涨幅=转为百分比(对应操作渠道当月数据["月环比增幅"].mean(),"")
        产品最大月环比涨幅=转为百分比(对应操作渠道当月数据["月环比增幅"].max(),"")
        产品最小月环比涨幅=转为百分比(对应操作渠道当月数据["月环比增幅"].min(),"")
        print(f"2、该渠道下产品的平均月环比涨幅为：{产品平均月环比涨幅}，最大月环比涨幅：{产品最大月环比涨幅}，最小月环比涨幅：{产品最小月环比涨幅}")
        保存数据(f"2、该渠道下产品的平均月环比涨幅为：{产品平均月环比涨幅}，最大月环比涨幅：{产品最大月环比涨幅}，最小月环比涨幅：{产品最小月环比涨幅}")

        # 按列'B'降序排列
        df_sorted = 对应操作渠道当月数据.sort_values(by='增长贡献比例', ascending=False)

        # 显示前10行数据
        top = df_sorted.head(10)
        top_10=top[top["增长贡献比例"]>0]
        print(top_10)
        合计交易占比=转为百分比(top_10["月增长量系统占比"].sum(),"")
        print(f"3、交易量下跌贡献前10合计新增交易占当月系统交易量为：{合计交易占比}，产品依次为:")
        保存数据(f"3、交易量下跌贡献前10合计新增交易占当月系统交易量为：{合计交易占比}，产品依次为:")
        i=0
        for index,row in top_10.iterrows():
            i=i+1
            产品贡献率=row["月增长量"]/月增长量
            交易占比=row["月增长量"]/当月交易量
            产品名称=row["产品名称"]
            上月交易=row["上月交易量"]
            当月交易=row["当月股基交易量（普通+信用，万）"]
            print(f"({i}),操作渠道：{操作渠道字典[操作渠道]}，下跌贡献第{i},下跌贡献率(月下跌量/系统月下跌量)：{转为百分比(row['月增长量'],月增长量)}，变动交易量占系统当月交易量占比为：{转为百分比(row['月增长量'],当月交易量)}，产品名称为：{产品名称},当月交易量：{当月交易}万，上月交易量：{上月交易}万，环比变动{转为百分比(当月交易-上月交易,上月交易)}")
            保存数据(f"({i}),操作渠道：{操作渠道字典[操作渠道]}，下跌贡献第{i},下跌贡献率(月下跌量/系统月下跌量)：{转为百分比(row['月增长量'],月增长量)}，变动交易量占系统当月交易量占比为：{转为百分比(row['月增长量'],当月交易量)}，产品名称为：{产品名称},当月交易量：{当月交易}万，上月交易量：{上月交易}万，环比变动{转为百分比(当月交易-上月交易,上月交易)}")
        # 按列'B'降序排列
        df_sorted = 对应操作渠道当月数据.sort_values(by='增长贡献比例', ascending=True)
        # 显示前10行数据
        top= df_sorted.head(10)
        top_10=top
        合计交易占比=转为百分比(top_10["月增长量"].sum()/当月交易量,"")
        print(f"4、交易量下跌贡献倒数前10合计新增交易占当月系统交易量为：{合计交易占比}，产品依次为:")
        保存数据(f"4、交易量下跌贡献倒数前10合计新增交易占当月系统交易量为：{合计交易占比}，产品依次为:")
        i=0
        for index,row in top_10.iterrows():
            i=i+1
            产品贡献率=row["月增长量"]/月增长量
            交易占比=row["月增长量"]/当月交易量
            产品名称=row["产品名称"]
            上月交易=row["上月交易量"]
            当月交易=row["当月股基交易量（普通+信用，万）"]
            print(f"({i}),操作渠道：{操作渠道字典[操作渠道]}，下跌贡献倒数第{i},下跌贡献率(月下跌量/系统月下跌量)：{转为百分比(row['月增长量'],月增长量)}，变动交易量占系统当月交易量占比为：{转为百分比(row['月增长量'],当月交易量)}，产品名称为：{产品名称},当月交易量：{当月交易}万，上月交易量：{上月交易}万，环比变动{转为百分比(当月交易-上月交易,上月交易)}")
            保存数据(f"({i}),操作渠道：{操作渠道字典[操作渠道]}，下跌贡献倒数第{i},下跌贡献率(月下跌量/系统月下跌量)：{转为百分比(row['月增长量'],月增长量)}，变动交易量占系统当月交易量占比为：{转为百分比(row['月增长量'],当月交易量)}，产品名称为：{产品名称},当月交易量：{当月交易}万，上月交易量：{上月交易}万，环比变动{转为百分比(当月交易-上月交易,上月交易)}")
        print("----------------------------------------------------------------------------------------------------")
        保存数据("----------------------------------------------------------------------------------------------------")
        保存数据("\n")
        保存数据("\n")
    明细数据=pd.concat([明细数据,对应操作渠道当月数据])
明细数据.to_excel("./当月交易数据统计明细.xlsx")
print("交易数据环比分析已生成")






